JonBoy_Kooparoids ("Kooparoids")
September 17, 2002 (version 0.7.0)
by JonBoy (jonboy@stdnet.com - http://people.stdnet.com/jonathan)

Kooparoids is an Asteroids clone which borrows the characters from Super Mario Brothers.  It is a fully playable Sphere game (with 8 levels), not a cheesy, one-trick demo.  

* * * PLAY CONTROL * * * 
(key) - (what it does)
UP - Increase Mario's speed
LEFT - Turn Mario counterclockwise
RIGHT - Turn Mario clockwise
SPACE - Spit fireballs.
Q - Quit Kooparoids immediately
 ~ Cut Scenes and Pop-Up Dialogs Only ~ 
ENTER - Quit the cut scene  
SPACE - Advance the cut scene/dialog

* * * SCORING * * * 
(badguy) - (big) (med) (small)
Goomba       25    50   100
Green Koopa  50   100   200 
Red Koopa   100   200   400
Blue Koopa  100   200   400 
Grey Koopa  200   400   800

Level Complete Bonus = Time Left * Level

* * * FEATURE REQUESTS * * * 
- Shields: When shields are up, Mario is invincible.  Player activates shields with a keypress.  Shield battery  is drained when shields are in use.
- Power Ups: 1-Up (green shroom), More Shields (star), Bomb (bob-om?), Faster Shots (flower?), Faster Rotation, More Bullets, etc.
- More Levels: Want to get up to 16 levels.
- Final Boss: Want to add battle vs. Bowser in last level.
- Buzzy Beetles: Want to add Buzzy Beetles (as a tougher opponent than Koopas).  
- More Cut Scenes: Want to add cut scene every four levels, plus if game is won (see known issues).
- Cloud Guy UFOs: Want to add the evil cloud guy (Laku?) to act as a "UFO".  Would throw spiny eggs.  
- Zero Time Enforcer: Want to add a BulletBill-spitting flying platform to shoot at Mario if the level timer reaches zero.  
- High Score Store and Display: Want to at least retain high scores from game to game. Would be really cool to hit a centralized program to list high scores from many players around the Internet.
- Game Start/PlayIntro/Quit Menu: Want to put game in loop to display a menu for players to play game, view high scores, view intro (see known issues) and quit.

* * * TECH DISCUSSION * * * 
Kooparoids relies on sector collision detection (because it's fast).  When collisions are detected by the collision detection routine, they are first collected into a queue from which duplicate collision events are removed.  Then the "collide" method on the respective sprite objects is called for each collision.  

All sprite objects are stored in an array.  This array is cleared for each level.  As sprites are "killed," the sprites are NOT set to "nothing" and the array is NOT "re-dimed".  Instead, the "dead" property is set to "true" on dead sprites, and they are ignored for the purposes of collision detection, updates and rendering.  Also, a "findnextspriteslot" function is used to "recycle" sprites by finding either the next dead sprite or appending a new sprite on the array if no slots are currently dead.

Vector math is nicely hidden by another new sprite method called "shove" - simply give it a direction and a speed and it will modify the shoved sprites current direction and speed accordingly.

* * * TEST ENVIRONMENT * * * 
Windows 2000 Server - 192 megs RAM - Dell Inspiron 7000
Sphere 0.97 (June 17, 2002 engine.exe)

* * * KNOWN ISSUES * * * 
- Mario will sometimes just die soon after the game begins or a new life begins, even though no asteroid is touching him. I suspect that the old Mario sprite is still being used to kill off Mario, even though it looks like I clear out the old sprite ok. 
- The "PlayFinale()" cut scene never renders its (white) text correctly.  (This routine is disabled in the current version.)  
- Sounds often "echo" or "linger" beyond the time they are supposed to be shut off.  I believe this is a Sphere/Audiere issue.
- Playing lots of sounds significantly slows down animation, even though the sounds are preloaded.  I believe this is also a Sphere/Audiere issue.

* * * VERSION HISTORY * * * 
0.7.0 - Released September 17, 2002
